/******************************************************************************
 * Copyright (C) 2017/5/3 ShenZhen LeRongSoft Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳乐融软件技术有限公司开发研制。未经本公司正式书面同意，其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.zhouyu.commonapi.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.springframework.boot.json.GsonJsonParser;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author chenys
 * @version v1.0
 * @ClassName: JsonUtils
 * @Desc: Json工具类
 * @date 2017-05-03 15:29:00
 * @history v1.0
 */
public class JsonUtil {
    private static Gson gson = new GsonBuilder().disableHtmlEscaping().create();

    /**
     * 对象装换成json字符串
     *
     * @param obj 对象
     * @return str json字符串
     */
    public static <T> String object2Json(T obj) {
        return gson.toJson(obj);
    }

    /**
     * json字符串转换成对象
     *
     * @param json json字符
     * @param claz
     * @return
     */
    public static <T> T json2Object(String json, Class<T> claz) {
        return gson.fromJson(json, claz);
    }

    /**
     * List转换成json字符串
     * @Author zhouyu
     * @date 2020/8/8 9:28
     * @param list list对象
     * @return {@link String} json字符串
     **/
    public static <T> String list2Json(List<T> list) {
        return gson.toJson(list);
    }

    /**
     * json转list
     * @Author zhouyu
     * @date 2020/8/7 14:50
     * @param json json字符串
     * @param clazz
     * @return {@link List} list对象
     **/
    public static <T> List<T> json2List(String json, Class<T> clazz) {
        List<Object> parseList = new GsonJsonParser().parseList(json);
        ArrayList<T> list = new ArrayList<>(parseList.size());
        for (Object obj : parseList) {
            T castObj = clazz.cast(obj);
            list.add(castObj);
        }
        return list;
    }

    /**
     * 将Map转化为Json
     * @Author zhouyu
     * @date 2020/9/8 9:26
     * @param map
     * @return {@link String} json字符串
     **/
    public static <K, V> String mapToJson(Map<K, V> map) {
        String jsonStr = gson.toJson(map);
        return jsonStr;
    }

    /**
     * json转Map
     * @Author zhouyu
     * @date 2020/9/7 14:58
     * @param json json字符串
     * @return {@link Map}
     **/
    public static Map<String, Object> json2Map(String json) {
        return new GsonJsonParser().parseMap(json);
    }


    /**
     * json转JsonObject
     * @Author zhouyu
     * @date 2020/8/8 9:24
     * @param json json字符串
     * @return {@link JsonObject}
     **/
    public JsonObject json2JsonObject(String json){
        return new JsonParser().parse(json).getAsJsonObject();
    }

}
